# _*_ utf-8 _*_

"""
python 是一门弱类型语言， 在定义变量时，不用像java那样 需要准确的知道变量的类型
解释器会自动推断变量的类型
"""
# x = 'answer'
# a = b = "123"
# c, d, e, f = 1, 2, 3, True
"""
标准数据类型有：
  Number 数字  不可变
  String 字符串 不可变
  List 列表  可变  使用[] 来创建
  Tuple 元组  不可变   使用小括号来创建
  Set 集合  可变数据 不重复 使用{} 和set() 来创建
  Dictionary 字典  可变数据  键值对，键唯一，键不可变
"""
a, b, c, d = 10, 5.5, True, 4+3j

# print(type(a))
# print(type(b))
# print(type(c))
# print(type(d))
# type 与 isinstance的区别在于， type 不会认为子类是一种父类类型， isinstance会
# print(isinstance(a, int))
# print(isinstance(b, float))
# print(isinstance(c, bool))
# print(isinstance(d, complex))

# 注意在python3中 bool是int的子类，true和false都可以与数字进行相加。 true=1，false=0 可以同过is来判断类型
# 在python2中 没有bool类型的， 它用0表示false 用1 表示True
print(1 + False)
print(0 + False)

var1 = 1
var2 = 10

print(var1, var2)
# 使用del 进行单个，或者多个对象的删除
del var1, var2
# print(var1, var2)

# 数值计算
"""
+ - * / % **(乘方）

/ 得到一个浮点数   // 得到一个整数， 在混合计算时， python 会把整型转换为浮点数
"""

# 字符串

"""
python 中没有单独的字符类型， 一个字符就是长度为1的字符串
与c不同的是， python中字符串不能被改变，向一个索引位置赋值，如word[0] = 'm', 会导致错误。

"""

# List 列表
"""
列表使用中括号
"""
# 倒序返回字符串
def reverseWords(input):
    inputWords = input.split(" ")
    inputWords = inputWords[-1::-1]
    output = ' '.join(inputWords)
    return output

if __name__ == "__main__":
    input = "i like runnoob"
    print(input[-1::-1])
    rw = reverseWords(input)
    print(rw)

# 元组 使用小括号，将元素包裹，元素之间使用逗号隔开，元素不能被修改
tuple1 = (1, "adf", False, 2.3123, 3+4j, 3*2)
tinyTuple = (2, 'runoob')

print(tuple1)
print(tinyTuple)
print(tinyTuple * 2)
print(tuple1 + tinyTuple)

# 构建0个元素和1个元素的元组
t1 = ()
t2 = (20,)

# set集合
"""
基本功能是：删除重复的元素，进行成员关系的测试
使用大括号或者set() 函数创建集合， 一个空的集合必须使用set()，而不是{}
"""
set1 = {1, 2.4, True, "12", t2}
set2 = set(set1)
set2.add(3 + 4j)
set2.add(3)
set2.add(3)

print(set1, "\n", set2)

# 字典
"""
通过键值对，来进行存取的
字典使用{} 标识， 它是一个无序的键值集合
键必须是不可变类型
同一个字典中键必须是唯一的
"""

dict1 = {'one': "1 菜鸟教程", 2: "2 菜鸟工具"}

tinyDict = {'name': 'runoob', 'code': 1, "site": 'www.runoob.com'}

print(dict1)
print(tinyDict)
print(tinyDict.keys())
print(tinyDict.values())

dict3 = {x: x**2 for x in (1, 2, 3, 4, 5, 6)}
print(dict3)

